package model

// 订单表结构体
type Order struct {
	Id            uint   `gorm:"column:id" json:"id" form:"id"`                                         // 订单ID
	Uid           uint   `gorm:"column:uid" json:"uid" form:"uid"`                                      // 用户ID
	OrderNo       string `gorm:"column:order_no;size:200;unique_index" json:"order_no" form:"order_no"` // 订单号
	OrderStatus   uint8  `gorm:"column:order_status" json:"order_status" form:"order_status"`           // 订单状态 0-待支付 1-待发货 2-待收货 3-已完成 4-已取消 5-退款中 6-已退款
	OrderAmount   int    `gorm:"column:order_amount" json:"order_amount" form:"order_amount"`           // 订单金额 单位：分
	PayAmount     int    `gorm:"column:pay_amount" json:"pay_amount" form:"pay_amount"`                 // 实际支付金额(含三方支付、钱包支付) 单位：分
	AmountListDB  string `gorm:"column:amount_list" json:"-" form:"-"`                                  // 附加金额列表(json格式)
	CreatedAt     int64  `gorm:"column:created_at" json:"created_at" form:"created_at"`                 // 创建时间
	UpdatedAt     int64  `gorm:"column:updated_at" json:"-" form:"-"`                                   // 更新时间
	IsUserDeleted uint8  `gorm:"column:is_user_deleted" json:"is_user_deleted" form:"is_user_deleted"`  // 用户是否删除 0-未删除 1-已删除
	IsDeleted     uint8  `gorm:"column:is_deleted" json:"is_deleted" form:"is_deleted"`                 // 是否删除 0-未删除 1-已删除

	// 以下字段仅用于展示，不参与数据库存储
	AmountList []OrderAmountList `gorm:"-" json:"amount_list" form:"amount_list"` // 附加金额显示列表
}

// 日志流水中的附加金额列表
type OrderAmountList struct {
	Amount  int64  `json:"amount"`             // 金额 单位：分
	Label   string `json:"label"`              // 附加金额标签
	OrderNo string `json:"order_no,omitempty"` // 关联订单号
	Desc    string `json:"desc,omitempty"`     // 附加金额描述
	OtherId string `json:"other_id,omitempty"` // 其他关联ID
}

func (o *Order) TableName() string {
	return "order"
}

// 订单地址表结构体信息
type OrderAddress struct {
	Id             uint    `gorm:"column:id" form:"id" json:"id"`                                            // 主键自增标识
	Name           string  `gorm:"column:name;size:200" form:"name" json:"name"`                             // 姓名
	Phone          string  `gorm:"column:phone;size:100" form:"phone" json:"phone"`                          // 电话/手机
	Provinces      string  `gorm:"column:provinces;size:200" form:"provinces" json:"provinces"`              // 省名称
	ProvincesCodes int     `gorm:"column:provinces_codes" form:"provinces_codes" json:"provinces_codes"`     // 省code
	City           string  `gorm:"column:city;size:200" form:"city" json:"city"`                             // 市名称
	CityCodes      int     `gorm:"column:city_codes" form:"city_codes" json:"city_codes"`                    // 市code
	Area           string  `gorm:"column:area;size:200" form:"area" json:"area"`                             // 区名称
	AreaCodes      int     `gorm:"column:area_codes" form:"area_codes" json:"area_codes"`                    // 区代码
	Village        string  `gorm:"column:village;size:200" form:"village" json:"village,omitempty"`          // 街道名称
	VillageCodes   int     `gorm:"column:village_codes" form:"village_codes" json:"village_codes,omitempty"` // 街道代码
	Longitude      float64 `gorm:"column:longitude" form:"longitude" json:"longitude,omitempty"`             // 经度
	Latitude       float64 `gorm:"column:latitude" form:"latitude" json:"latitude,omitempty"`                // 维度
	Address        string  `gorm:"column:address;size:300" form:"address" json:"address"`                    // 详细地址
}

func (o *OrderAddress) TableName() string {
	return "order_address"
}

// 订单子表结构体信息
type OrderItems struct {
	Id             uint   `gorm:"column:id" json:"id" form:"id"`                                           // 订单子表ID
	OrderId        uint   `gorm:"column:order_id" json:"order_id" form:"order_id"`                         // 订单ID
	OrderAddressId uint   `gorm:"column:order_address_id" json:"order_address_id" form:"order_address_id"` // 订单地址ID
	ProductType    uint8  `gorm:"column:product_type" json:"product_type" form:"product_type"`             // 产品类型 1-商品
	ProductId      uint   `gorm:"column:product_id" json:"product_id" form:"product_id"`                   // 产品ID
	ProductTitle   string `gorm:"column:product_title;size:250" json:"product_title" form:"product_title"` // 产品标题 冗余
	ProductSub     string `gorm:"column:product_sub;size:250" json:"product_sub" form:"product_sub"`       // 产品子标题/规格 冗余
	ProductDesc    string `gorm:"column:product_desc;size:250" json:"product_desc" form:"product_desc"`    // 产品描述 冗余
	ProductImg     string `gorm:"column:product_img;size:250" json:"product_img" form:"product_img"`       // 产品图片 冗余
	Amount         int    `gorm:"column:amount" json:"amount" form:"amount"`                               // 产品单价 冗余 单位：分
	ProductNum     uint   `gorm:"column:product_num" json:"product_num" form:"product_num"`                // 产品数量
	CouponAmount   int    `gorm:"column:coupon_amount" json:"coupon_amount" form:"coupon_amount"`          // 优惠金额 单位：分
	WalletAmount   int    `gorm:"column:wallet_amount" json:"wallet_amount" form:"wallet_amount"`          // 钱包支付金额 单位：分
	OtherAmount    int    `gorm:"column:other_amount" json:"other_amount" form:"other_amount"`             // 三方支付金额 单位：分
	AmountListDB   string `gorm:"column:amount_list" json:"-" form:"-"`                                    // 附加金额列表(json格式)

	// 以下字段仅用于展示，不参与数据库存储
	AmountList []OrderAmountList `gorm:"-" json:"amount_list" form:"amount_list"` // 附加金额显示列表
}

func (o *OrderItems) TableName() string {
	return "order_items"
}

// 订单状态变更日志表结构体信息
type OrderStatusLog struct {
	Id         uint   `gorm:"column:id" json:"id" form:"id"`                                     // 主键自增标识
	OrderId    uint   `gorm:"column:order_id" json:"order_id" form:"order_id"`                   // 订单ID
	OldStatus  uint8  `gorm:"column:old_status" json:"old_status" form:"old_status"`             // 旧状态
	NewStatus  uint8  `gorm:"column:new_status" json:"new_status" form:"new_status"`             // 新状态
	ChangeType uint8  `gorm:"column:change_type" json:"change_type" form:"change_type"`          // 变更类型 1-系统变更 2-用户操作
	ChangeDesc string `gorm:"column:change_desc;size:250" json:"change_desc" form:"change_desc"` // 变更描述
	OperatorId uint   `gorm:"column:operator_id" json:"operator_id" form:"operator_id"`          // 操作人ID(系统变更此值为0)
	CreatedAt  int64  `gorm:"column:created_at" json:"created_at" form:"created_at"`             // 创建时间
}

func (o *OrderStatusLog) TableName() string {
	return "order_status_log"
}
